package me.yushuai.wukong.base.service;

import me.yushuai.wukong.base.api.dto.CreateZoneGroupDTO;
import me.yushuai.wukong.base.api.dto.PagingSearchZoneGroup;
import me.yushuai.wukong.base.api.dto.UpdateZoneGroupDTO;
import me.yushuai.wukong.base.api.dto.ZoneGroupDTO;
import me.yushuai.wukong.common.dto.PageDTO;
import me.yushuai.wukong.common.exceptin.BizIdNotExistException;
import me.yushuai.wukong.common.exceptin.DuplicateBizIdException;
import me.yushuai.wukong.common.exceptin.NotExistException;
import me.yushuai.wukong.common.service.BaseService;

/**
 * 区域业务接口
 *
 * @author zhoushuai@189.cn
 * @since 2022-08-31
 */
public interface ZoneGroupService extends BaseService {

    /**
     * 新建一条区域信息
     *
     * @param dto 区域信息
     * @return 返回区域信息编号
     * @throws DuplicateBizIdException 当区域业务Id重复时抛出异常
     */
    Long createZoneGroup(CreateZoneGroupDTO dto) throws DuplicateBizIdException;


    /**
     * 修改区域信息
     *
     * @param dto 区域信息
     * @return 返回修改后的区域编号
     * @throws BizIdNotExistException 当业务Id不存在时抛出异常
     */
    Long updateZoneGroup(UpdateZoneGroupDTO dto) throws BizIdNotExistException;

    /**
     * 删除一条区域信息
     *
     * @param zoneGroupId 区域编号
     * @throws NotExistException 当区域编码不存在时抛出异常
     */
    void deleteZoneGroup(Long zoneGroupId) throws NotExistException;

    /**
     * 通过ID查询区域的详细信息
     *
     * @param zoneGroupId 区域编号
     * @return 返回区域的详细信息
     * @throws NotExistException 当区域不存在时抛出异常
     */
    ZoneGroupDTO findZoneGroupById(Long zoneGroupId) throws NotExistException;

    ZoneGroupDTO findZoneGroupByBizId(String bizId) throws BizIdNotExistException;

    /**
     * 分页条件检索区域信息
     *
     * @param pagingSearchZoneGroup 分页检索条件
     * @return 分页返回查询结果
     */
    PageDTO<ZoneGroupDTO> pagingSearchZoneGroup(PagingSearchZoneGroup pagingSearchZoneGroup);

    boolean existsById(Long zoneGroupId);

    boolean existsByBizId(String zoneBizId);

}
